/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.eurotrader.email;

import br.com.eurotrader.entidades.Parametrosgerais;
import br.com.eurotrader.entidades.Usuario;
import java.util.ArrayList;
import javax.mail.internet.MimeMessage;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;

/**
 *
 * @author PROG01
 */
public class Email {

//    public void enviarEmailsAniversario(ApplicationContext appCtx) {
//        MensageiroController mensageiroController;
//        if (appCtx != null) {
//            mensageiroController = (MensageiroController) appCtx.getBean("MensageiroController");
//        } else {
//            mensageiroController = (MensageiroController) ClasseMetodosGerais.pegaManagedBean("MensageiroController");
//        }
//        ArrayList<Filial> filiais = (ArrayList<Filial>) mensageiroController.getMensageiroDao().pesq("SELECT f FROM Filial f", null, "");
//        if (filiais != null) {
//            for (Filial filial : filiais) {
//                Parametrosgerais parametrosgerais = (Parametrosgerais) mensageiroController.getMensageiroDao().getResultSimples("SELECT p FROM Parametrosgerais p WHERE p.filialId.id = " + filial.getId(), null);
//                if (parametrosgerais != null) {
//                    if ((parametrosgerais.getEmailAniversarioClientes() != null) && (parametrosgerais.getEmailContaRemetente() != null)) {
//                        if (parametrosgerais.getEmailAniversarioClientes().toLowerCase().equals("true")) {
//                            ArrayList<Cliente> listaClientes = (ArrayList<Cliente>) mensageiroController.getMensageiroDao().pesq("SELECT c FROM Cliente c WHERE c.filialId.id = " + filial.getId() +
//                                    " AND c.dataNascEnvioEmail = '" + new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()) + "' AND (c.email is not null AND c.email <> '')", null, "");
//                            JavaMailSender enviaEmail;
//                            if (appCtx != null) {
//                                enviaEmail = (JavaMailSender) appCtx.getBean("classeEnviaEmail");
//                            } else {
//                                enviaEmail = (JavaMailSender) ClasseMetodosGerais.pegaManagedBean("classeEnviaEmail");
//                            }
//                            for (Cliente cliente : listaClientes) {
//                                if ((cliente.getNomeAniversarianteEmail() != null) && (cliente.getNomeAniversarianteEmail() != null) && (cliente.getNomeAniversarianteEmail() != null) && (!cliente.getNomeAniversarianteEmail().isEmpty())) {
//                                    ArrayList<Mensagemaniversario> listaMensagens = (ArrayList<Mensagemaniversario>) mensageiroController.getMensageiroDao().pesq("SELECT m FROM Mensagemaniversario m", filial, "");
//                                    if ((listaMensagens != null) && (!listaMensagens.isEmpty())) {
//                                        int i = (int) (Math.random() * listaMensagens.size());
//                                        String mensagemAniversario = "<html><body>" + listaMensagens.get(i).getMensagem();
//                                        // mensagemAniversario += "<b>Feliz Aniversário " + cliente.getNomeAniversarianteEmail() + "!!!!</b></body></html>";
//                                        mensagemAniversario += "<p style='text-align: left;'><strong>Feliz Anivers&aacute;rio " + cliente.getNomeAniversarianteEmail() + ",&nbsp; muitos anos de sa&uacute;de e vida !!!</strong></p>" +
//                                                "<p style='text-align: left;'><strong>&Eacute; o desejo da " + filial.getNomeFantasia() + " e de todos seus colaboradores.</strong></p></body></html>";
//                                        enviaEmail(parametrosgerais.getEmailContaRemetente(), cliente.getEmail(), listaMensagens.get(i).getAssunto(), mensagemAniversario, enviaEmail, null, parametrosgerais);
//                                    }
//                                }
//                            }
//                        }
//                    }
//                }
//            }
//        }
//    }
//    public void enviarEmailsParaOsClientes(ArrayList<Cliente> listaDeClientes, String mensagem, String titulo) {
//        SessionBean1 sessao = (SessionBean1) ClasseMetodosGerais.pegaManagedBean("SessionBean1");
//        JavaMailSender enviaEmail = (JavaMailSender) ClasseMetodosGerais.pegaManagedBean("classeEnviaEmail");
//        if (sessao.getParametroGeralDaFilial() != null) {
//            if (sessao.getParametroGeralDaFilial().getEmailContaRemetente() != null) {
//                for (Cliente cliente : listaDeClientes) {
//                    if (cliente.getEmail() != null) {
//                        enviaEmail(sessao.getParametroGeralDaFilial().getEmailContaRemetente(), cliente.getEmail(), titulo, mensagem, enviaEmail, null, null);
//                    }
//                }
//            }
//        }
//    }
    public void enviarEmailsParaOsClientes(ArrayList<Usuario> listaDeUsuarios, String mensagem, String titulo, Parametrosgerais parametros, JavaMailSender enviaEmail, String destinatario, String emitente) {
        // System.out.println("acessei aquiemail");
        if (parametros != null) {
            //    System.out.println("acessei aqui tem parametro email");
            if (destinatario != null) {
                if ((emitente != null) && (!emitente.isEmpty())) {
                    enviaEmail(emitente, destinatario, titulo, mensagem, enviaEmail, parametros);
                } else {
                    if ((parametros.getUsuarioEmail() != null) && (!parametros.getUsuarioEmail().isEmpty())) {
                        enviaEmail(parametros.getUsuarioEmail(), destinatario, titulo, mensagem, enviaEmail, parametros);
                    }
                }
            } else {
                if (listaDeUsuarios != null) {
                    for (Usuario usuario : listaDeUsuarios) {
                        //  System.out.println("acessei aqui3 "+cliente.getEmail());
                        if (usuario.getUsuario() != null) {

                            if ((emitente != null) && (!emitente.isEmpty())) {
                                //    enviaEmail(emitente, destinatario, titulo, mensagem, enviaEmail);
                                enviaEmail(emitente, usuario.getUsuario(), titulo, mensagem, enviaEmail, parametros);
                            } else {
                                if ((parametros.getUsuarioEmail() != null) && (!parametros.getUsuarioEmail().isEmpty())) {
                                    enviaEmail(parametros.getUsuarioEmail(), usuario.getUsuario(), titulo, mensagem, enviaEmail, parametros);
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    private void enviaEmail(final String emailRemetente,
            final String emailDestinatario,
            final String assunto,
            final String mensagem,
            JavaMailSender enviaEmail, Parametrosgerais parametros) {
        //    System.out.println("vou executar");
        MimeMessagePreparator preparator = new MimeMessagePreparator() {

            public void prepare(MimeMessage mimeMessage) throws Exception {
                MimeMessageHelper MMhelper = new MimeMessageHelper(mimeMessage, false, "ISO-8859-1");
                MMhelper.setTo(emailDestinatario);
                MMhelper.setFrom(emailRemetente);
                MMhelper.setSubject(assunto);
                MMhelper.setText(mensagem, true);

            }
        };
        try {
            JavaMailSenderImpl envia = (JavaMailSenderImpl) enviaEmail;

            if ((parametros.getUsuarioEmail() != null) && (!parametros.getUsuarioEmail().equals(""))
                    && (parametros.getSenhaEmail() != null) && (!parametros.getSenhaEmail().equals(""))) {
                envia.setUsername(parametros.getUsuarioEmail());
                envia.setPassword(parametros.getSenhaEmail());
                envia.send(preparator);
            }
        } catch (MailException ex) {
            System.out.println("Email não foi enviado automaticamente devido a algum erro. E-mail: " + emailDestinatario + " - "
                    + " Remetente: " + emailRemetente + " - " + ex.getMessage());
            System.err.println(ex.getMessage());
//            FacesUtils.mensInfo("Erro ao enviar", "Ocorreu um erro ao enviar o e-mail: " + emailDestinatario + " - " +
//                    " Remetente: " + emailRemetente + " " + ex.getMessage());
        }
    }
}
